/*
 * @Author: ujjldn ujjldn0515@163.com
 * @Date: 2025-06-23 19:43:23
 * @LastEditors: ujjldn ujjldn0515@163.com
 * @LastEditTime: 2025-06-24 11:08:01
 * @FilePath: \g-table\src\utils\import.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import * as XLSX from 'xlsx'
/**
 * 导入 JSON 文件并返回解析后的对象
 * @returns {Promise<Object|null>} 解析后的 JSON 对象或 null（如果用户取消或出错）
 */
export const importFromJson = () => {
    return new Promise((resolve, reject) => {
        const input = document.createElement('input');
        input.type = 'file';
        input.accept = '.json';

        input.onchange = async (event) => {
            const file = event.target.files[0];
            if (!file) {
                resolve(null);
                return;
            }

            const reader = new FileReader();
            reader.onload = () => {
                try {
                    const json = JSON.parse(reader.result);
                    resolve(json);
                } catch (error) {
                    reject(new Error('无法解析 JSON 文件'));
                }
            };
            reader.onerror = () => {
                reject(new Error('读取文件失败'));
            };
            reader.readAsText(file);
        };

        input.click();
    });
}
/**
 * 导入Excel文件的钩子  暂时不用
 * 该钩子用于触发用户选择Excel文件，并在选择成功后调用回调函数
 * 主要用途是简化Excel文件的导入流程，并且可以灵活地处理导入后的文件
 * 
 * @param {Function} onSuccess 文件选择成功后的回调函数，用于处理选定的文件
 *                             该函数接受一个参数，即选定的文件对象
 * @returns {Function} 返回一个函数，当调用该函数时，会触发文件选择框
 */
export const useImportExcel=(onSuccess)=> {
  return () => {
    const fileInput = document.createElement('input')
    fileInput.type = 'file'
    fileInput.accept = '.xlsx, .xls'
    fileInput.style.display = 'none'
    fileInput.addEventListener('change', (event) => {
      const file = event.target.files?.[0]
      if (file) onSuccess(file)
      event.target.remove()
    })
    document.body.appendChild(fileInput)
    fileInput.click()
  }
}

export const getExcelImportData = () => {
  return new Promise((resolve, reject) => {
    const fileInput = document.createElement('input');
    fileInput.type = 'file';
    fileInput.accept = '.xlsx, .xls';
    fileInput.style.display = 'none';

    fileInput.addEventListener('change', async (event) => {
      const file = event.target.files?.[0];
      if (!file) {
        reject(new Error('未选择文件'));
        return;
      }

      try {
        const excelData = await excelImportData(file); // ✅ 使用 await 等待解析完成
        console.log('ddd', excelData); // ✅ 正确输出数据
        resolve(excelData); // ✅ 将解析后的数据 resolve 出去
      } catch (error) {
        reject(error);
      } finally {
        event.target.remove();
      }
    });

    document.body.appendChild(fileInput);
    fileInput.click();
  });
};


export function excelImportData(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = (e) => {
      const data = new Uint8Array(e.target.result);
      const workbook = XLSX.read(data, { type: 'array' });
      const firstSheetName = workbook.SheetNames[0];
      const worksheet = workbook.Sheets[firstSheetName];
      const json = XLSX.utils.sheet_to_json(worksheet);
      resolve(json);
    };
    reader.onerror = (error) => reject(error);
    reader.readAsArrayBuffer(file);
  });
}